home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE sort_data_on_key(
- VAR key : vector_1;
- VAR data : vector_2;
- VAR record_count : INTEGER);
- VAR
- finished
- : BOOLEAN;
- key_index_1,
- key_index_2,
- left,
- right,
- tem_data
- : INTEGER;
- tem_key
- : REAL;
- BEGIN
- left:=record_count DIV 2;
- left:=left+1;
- right:=record_count;
- finished:=FALSE;
- tem_key:=key[1];
- tem_data:=data[1];
- WHILE (right > 1) DO
- BEGIN
- IF left > 1 THEN
- BEGIN
- left:=left-1;
- tem_key:=key[left];
- tem_data:=data[left]
- END
- ELSE
- BEGIN
- tem_key:=key[right];
- tem_data:=data[right];
- key[right]:=key[1];
- data[right]:=data[1];
- right:=right-1
- END;
- IF right > 1 THEN
- BEGIN
- key_index_2:=left;
- finished:=FALSE;
- WHILE (NOT finished) DO
- BEGIN
- key_index_1:=key_index_2;
- key_index_2:=2*key_index_2;
- IF key_index_2 > right THEN
- finished:=TRUE
- ELSE
- BEGIN
- IF key_index_2 <> right THEN
- BEGIN
- IF key[key_index_2]
- < key[key_index_2+1] THEN
- key_index_2:=key_index_2+1
- END;
- IF tem_key >= key[key_index_2] THEN
- finished:=TRUE
- ELSE
- BEGIN
- key[key_index_1]
- :=key[key_index_2];
- data[key_index_1]
- :=data[key_index_2]
- END
- END
- END;
- data[key_index_1]:=tem_data;
- key[key_index_1]:=tem_key
- END
- END;
- key[1]:=tem_key;
- data[1]:=tem_data
- END;